"""
装饰器的介绍：
    概述：
        装饰器=闭包函数，即：装饰器是闭包函数的一种写法。
    目的/作用：
        在不改变原有函数的基础上，对原有函数的功能做加强。
    前提条件：
        1：有嵌套
        2：有引用
        3：有返回
        4：有额外功能

    装饰器的用法：
        写法1：传统写法
            变量名 = 装饰器名(要被装饰的原函数名)
            变量名()       # 执行的就是，装饰后的原函数
        写法2：语法糖         语法糖 = 语法格式简化版
            在定义原函数的时候，加上@装饰器名即可，之后就能正确调用该原函数即可
"""
# 需求：发表评论前，需要先登录（模拟的操作）

# 1：定义装饰器（闭包函数），用于对指定函数功能做增强。
def login(fn_name):       #有外部函数
    # 定义内部函数，用于对指定的fn_name函数功能做增强。
    def inner():                #有内部函数
        print("登录中...登录成功....") #有额外功能
        fn_name()               #有引用

    return inner                #有返回

# # 写法1：传统写法
# def comment():
#     print("发表评论...")

# 写法2：语法糖
# comment()上面加一个@check_login修饰符的含义是：将comment函数名作为check_login函数的参数传递给check_login函数，并返回check_login函数的返回值
@login
def comment():
    print("发表评论...")

if __name__ == '__main__':
    # 2：调用装饰器，并传入要被装饰的函数名
    # 写法1：传统写法
    # comment = check_login(comment)
    # comment()

    # 写法2：语法糖, 在定义原函数的时候，加上@装饰器名即可，之后就能正确调用该原函数即可
    comment()
